//1905. [java队列BFS/例子]销售点分布调查 https://oj.rnd.huawei.com/problems/1905/details
// 输入 第一行一个整数 N 表示销售负责人总数，取值范围：[1,100)。
// 第二行一个整数 M （0 <= M < N）表示有下属的负责人的人数。
// 随后 M 行，每行给出一位负责人，格式为ID K ID[1] ID[2] ... ID[K]，
// 其中 ID 是该负责人的代号，K (K > 0) 是其下属人数，后面给出的其下属们的代号。
// 最后一行给出待统计的指定负责人的代号ID
// 输出两个数字，依次表示指定负责人名下人数最多的层级，及该层级的人数。
// 输入 23
// 13
// 21 1 23
// 01 4 03 02 04 05
// 03 3 06 07 08
// 06 2 12 13
// 13 1 21
// 08 2 15 16
// 02 2 09 10
// 11 2 19 20
// 17 1 22
// 05 1 11
// 07 1 14
// 09 1 17
// 10 1 18
// 01
// 输出 [4 9]

private static int[] pointSaleSurvey(int totalSales, Map<Integer, List<Integer>> relationList, int appointSale) {
    // 用来记录最后结果第几层；
    int level = 0;
    // 用来记录最多节点个数；
    int count = 0;
    // 层数遍历指针
    int index = 0;
    // 使用队列BFS；
    Queue<Integer> queue = new LinkedList<>();
    queue.add(appointSale);
    while (!queue.isEmpty()) {
        index++;
        // 如果当前层数大于记录数，更新结果；
        if (queue.size() > count) {
            level = index;
            count = queue.size();
        }
        // 没啥说的，使用队列层序遍历“二叉树”；
        for (int i = queue.size(); i > 0; i--) {
            int tmp = queue.poll();
            if (relationList.containsKey(tmp)) {
                for (int m : relationList.get(tmp)) {
                    queue.add(m);
                }
            }
        }
    }
    return new int[] {level, count};
}

